iT邦幫忙

2024 iThome 鐵人賽

DAY 25
0

什麼是暫時性死區(TDZ)?

當我們使用 let 或 const 來宣告變數時,這些變數在宣告之前就已經存在於它們所在的範疇中,但是在變數實際宣告之前的那段時間,我們是無法訪問它們的。這段時間就叫做「暫時性死區」(TDZ)。在這段時間內,如果我們嘗試訪問這些變數,會得到 ReferenceError 錯誤。

TDZ 的存在可以幫助我們避免一些不期望的行為,特別是在程式碼複雜或是變數命名重複時,可以讓我們的程式碼更加安全和可靠。

console.log(myVar); // 這裡會出錯
let myVar = 10;
console.log(myVar); // 這裡會輸出 10

在這個例子中,我們在變數 myVar 使用 let 進行宣告之前嘗試訪問它。根據 TDZ 的規則,因為變數 myVar 是用 let 宣告的,在這行宣告語句之前的所有程式碼(也就是 TDZ)中都不能訪問它。所以當我們在第一行嘗試 console.log(myVar) 時,會出現 ReferenceError。

為什麼會有 TDZ?

TDZ 是為了避免在變數還未初始化時使用它。這是一種保護措施,防止我們在變數尚未正確設定之前就使用它,導致潛在的錯誤。

簡單理解 TDZ

你可以把 TDZ 想像成變數宣告之前的一個「保護罩」。這個保護罩在變數使用 let 或 const 宣告之前存在。只有當宣告發生時,這個保護罩才會被移除,變數才可以正常使用。

var 宣告與 let / const 的區別

在使用 var 進行變數宣告時,不存在 TDZ 的概念。var 宣告的變數會被「提升」到它所在的函式或全域範圍的頂端,而初始化則保持在原來的位置。這意味著即使在宣告 var 之前訪問該變數,也不會導致錯誤,但變數的值是 undefined。

console.log(myVar); // 這裡會輸出 undefined,而不是出錯
var myVar = 10;
console.log(myVar); // 這裡會輸出 10

這就是為什麼 let 和 const 提供了更好的變數管理方式,避免在未正確初始化變數時的使用問題。


上一篇
[Day 24] 甚麼是同源政策?
下一篇
[Day 26] 學習Promise
系列文
讀書筆記&心得-看完這本就會懂!帶你無痛提升JavaScript面試力:精選55道前端工程師的核心問題 × 求職加分模擬試題解析30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言